package com.co.server.service.vote;

import java.util.List;

import com.co.common.service.BaseService;
import com.co.common.utils.PageReq;
import com.co.server.entity.vote.TChoice;
import com.co.server.entity.vote.TVote;
import com.co.server.entity.vote.aide.VoteForm;
import com.co.server.service.user.impl.UsersSession;

public interface TVoteService extends BaseService<TVote, Integer> {
	/**
	 * 新增投票（全部数据）
	 * @param voteForm
	 */
	void addVote4Form(VoteForm voteForm);
	/**
	 * 更新投票（全部数据）
	 * @param voteForm
	 */
	void updateVote4Form(VoteForm voteForm);
	
	/**
	 * 根据UserId 查询其未投的投票
	 * @param UserId
	 * @return
	 */
	List<TVote> queryNotVoteByUserIdandIp(Integer userId,String ip);
	
	/**
	 * 用户投票
	 * vote表：voteNum+1
	 * voteUser表：先查询是否已投票，如果没投票，便增加一条或多条数据
	 * @param tVoteForm 投票信息
	 * @param userId 用户Id
	 * @return 是否成功 1成功 0 不成功
	 */
	Byte doVote(TVote tVoteForm,Integer userId,String ip);
	
	/**
	 * 用户点赞
	 * 一个ip对一个投票只能点赞一次
	 * vote表点赞加一
	 * choice表 先查询 是否已点赞，没点则增加一条数据
	 * @return 是否成功 1成功 0 不成功
	 */
	Byte doKnock(TChoice tChoice);
	
	/**
	 * 获得首选投票
	 * @param usersSession  session对象
	 * @param pageReq 分页对象
	 * @return 投票对象
	 */
	TVote getDefaultVote(UsersSession usersSession ,PageReq pageReq,String ip);
	
	/**
	 * 查看是否已经投票，guest可以投票多次
	 * @param userId 用户id
	 * @param voteIp 用户投票ip
	 * @param voteId 投票id 
	 * @return true已经投票；false 还没投票
	 */
	Boolean getVoteFlg(Integer userId,String voteIp,Integer voteId);
		
}